<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TestController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('/test', [TestController::class, 'index']);

// 基本路由。只需一个 URI 和一个闭包函数
Route::get('index', function () {
    return 'hello world';
});

// 控制器路由。只需一个 URI 和 一个控制器接口


// 写法一
Route::get('users', 'App\Http\Controllers\UsersController@index');



// 写法二
Route::get('users', ['App\Http\Controllers\UsersController', 'index']);


// 写法三
use App\Http\Controllers\UsersController;

Route::get('users', [UsersController::class, 'index']);


// 写法四
Route::namespace('App\Http\Controllers')->group(function () {

    Route::get('users', 'UsersController@index');
});



/*Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback)*/


Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('/', function () {
    //
});

Route::resource('users', UsersController::class)->only(['index','show']);


#################################################################
// Route::group(['namespace' => 'App\Http\Controllers'], function () {
//     // 1.获取全部用户数据。相当于访问列表页
//     Route::get('/users', 'UsersController@index')->name('users.index');
//     // 2.访问用户的新增页面
//     Route::get('/users/create', 'UsersController@create')->name('users.create');
//     // 3.新增用户的逻辑处理
//     Route::post('/users', 'UsersController@store')->name('users.store');
//     // 4.访问用户详情展示页面
//     Route::get('/users/{user}', 'UsersController@show')->name('users.show');
//     // 5.访问用户详情编辑页面
//     Route::get('/users/{user}/edit', 'UsersController@edit')->name('user.edit');
//     // 6.更新用户的逻辑处理
//     Route::put('/users/{user}', 'UsersController@update')->name('users.update');
//     // 7.删除用户的逻辑处理
//     Route::delete('/users/{user}', 'UsersController@destroy')->name('users.destroy');
// });

#################################################################


#######路由参数#######


// 必填参数
Route::get('user2/{id}', function ($id) {
    return '用户id：'.$id;
});

// 可选参数。可选参数必须有默认值。
Route::get('user/{id}/{name?}', function ($id, $name='tom') {
    return '用户id：'.$id."，用户名：".$name;
});


#######路由组#######
// 路由组允许内部的路由共享相同的路由属性

// 路由属性之中间件
// 给路由组中的所有路由分配中间件，中间件会按他们在数组中的顺序来运行。

// 写法一
Route::middleware(['web', 'auth'])->group(function () {

    // Route::get();
    // Route::get();
    // Route::get();


});
// 写法二

Route::group(['middleware' => ['web', 'auth']], function () {

//

});



// 路由属性之命名空间
// 写法一
Route::namespace('App\Http\Controllers')->group(function () {});
// 写法二
Route::group(['namespace' => 'App\Http\Controllers'], function () {

    Route::get('index2', 'UserController@index')->name('admin.xx');
});


// 路由属性之路由前缀
// 写法一
Route::prefix('admin')->group(function () {});
// 写法二
Route::group(['prefix' => 'admin'], function () {


}) ;


// 路由属性之路由名称前缀
// 写法一
Route::name('admin.')->group(function () {});
// 写法二
Route::group(['as' => 'admin.'], function () {});
// 写法三
Route::group(['name_prefix' => 'admin.'], function () {});






use App\Models\User;

Route::get('api/users/{user}', function (User $user) {
    // return $user->email;
    dd($user);
});

Route::get('api/email/{email}', 'App\Http\Controllers\UsersController@getUserByEmail');


Route::group(['middleware'=>['userGroup:3']], function () {
    Route::get('group', function () {
        return 'ok';
    });
});



